home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cdity / ModeProSrc.lha / Prefs / MPP_ProcessInput.c < prev    next >
C/C++ Source or Header  |  1999-01-25  |  20KB  |  806 lines

  1. #include "mppexterns.h"
  2.  
  3. void ProcessInput(void)
  4. {
  5.   struct IntuiMessage *imsg;
  6.   ULONG  winsig, signal, prefsig, allsigs,replysig,forcedsig;
  7.   
  8.   forcedsig=1 << ForcedSig;
  9.   replysig= 1 << ReplyPort->mp_SigBit;
  10.   prefsig = 1 << PrefsPort->mp_SigBit; 
  11.   winsig  = 1 << Win->UserPort->mp_SigBit;  
  12.   allsigs = replysig | winsig | prefsig | SIGBREAKF_CTRL_C | forcedsig;
  13.   
  14.   while (!ClosePrefs || MsgsOut)
  15.   {
  16.  
  17.     signal=Wait(allsigs);
  18.     
  19.     if(forcedsig & signal)
  20.     {
  21.       if(!ForcedEditMsg)
  22.       {
  23.         if(ForcedEditMsg=(struct MPMessage *)GetMsg(&MPSem->PrefsToDoPort));//                         (4.62.8)
  24.           RemakeGads();
  25.       }
  26.     }
  27.     
  28.     if(replysig & signal)
  29.     {
  30.       struct MPMessage *mpm;
  31.       while(mpm=(struct MPMessage *)GetMsg(ReplyPort))
  32.       {
  33.         //printf("Freeing Replied Msg %8x\n",mpm);
  34.         FreeVec(mpm);
  35.         MsgsOut--;
  36.       }
  37.     }
  38.     
  39.     
  40.     if(SIGBREAKF_CTRL_C & signal)
  41.       ClosePrefs=TRUE;
  42.  
  43.     if(winsig & signal)
  44.     {
  45.       while(imsg = GT_GetIMsg(Win->UserPort))
  46.       {
  47.         switch (imsg->Class)
  48.         {
  49.           case IDCMP_NEWSIZE:
  50.             if(!RemakeGads())
  51.             {
  52.               ClosePrefs=TRUE;   
  53.             }
  54.             break;
  55.           case IDCMP_MOUSEMOVE:
  56.             process_mousemoves(imsg);
  57.             break;
  58.           case IDCMP_GADGETUP:           
  59.             process_gadgetups(imsg);
  60.             break;
  61.           case IDCMP_VANILLAKEY:
  62.             Process_Keys(imsg);
  63.             break;
  64.           case IDCMP_REFRESHWINDOW:
  65.  
  66.             GT_BeginRefresh(Win);
  67.             RefreshGUI();
  68.             GT_EndRefresh(Win,TRUE);
  69.             break;
  70.           case IDCMP_MENUPICK:
  71.             process_menus(imsg);
  72.             break;            
  73.         }
  74.         GT_ReplyIMsg(imsg);
  75.       }
  76.       {
  77.         struct DefaultNode *n;
  78.         
  79.         if(n=GetActiveNode())
  80.         {
  81.           switch(ActivateStrGad)
  82.           {
  83.             /*****************************************************************************
  84.             case GD_NAME:
  85.               if(CurrentList==PL_SCREENMODES)
  86.                 ActivateStrGad=0;
  87.                 break;
  88.             ******************************************************************************/
  89.             case GD_WIDTH:
  90.             case GD_HEIGHT:
  91.               if(n->ModeSelect!=MS_PROMOTE_SCREENMODE && n->ModeSelect!=MS_PROMOTE_REQUESTER)
  92.                 ActivateStrGad=0;
  93.               break;
  94.             case GD_PENVAL:
  95.               if(!n->Look3D)
  96.                 ActivateStrGad=0;
  97.               break;
  98.             case GD_LOCKEDPENS:
  99.               if(!(n->Flags & SHAREPENS))
  100.                 ActivateStrGad=0;
  101.               break;
  102.             case GD_PUBNAME:
  103.               if(n->PubOptions==0)
  104.                 ActivateStrGad=0;
  105.               break;
  106.             case GD_HOTKEYSTR:
  107.               if(!(n->Flags & SCRHOTKEY))
  108.                 ActivateStrGad=0;
  109.               break;
  110.           }
  111.         }
  112.         else
  113.           ActivateStrGad=0;
  114.       }
  115.       if(ActivateStrGad)
  116.       {
  117.         
  118.         ActivateGadget(LG_GetGadget(GadControl,ActivateStrGad),Win,NULL);
  119.         ActivateStrGad=0;
  120.       }
  121.     }
  122.     
  123.     if(prefsig & signal)
  124.       ProcessPrefsMessages();
  125.   }
  126. }       
  127.  
  128.     
  129. void process_gadgetups(struct IntuiMessage *imsg)
  130. {
  131.   struct Gadget *gad;
  132.   struct DefaultNode *n;
  133.   UWORD  code,id;  
  134.   
  135.   code=imsg->Code;
  136.   gad=(struct Gadget*)imsg->IAddress;
  137.   id=gad->GadgetID;  
  138.    
  139.   switch(id)
  140.   {
  141.  
  142.     case GD_NEW:
  143.       GD_New();
  144.       break;
  145.  
  146.     case GD_SAVE:
  147.       GD_Save();
  148.       break;
  149.     case GD_USE:
  150.       GD_Use();
  151.       break;
  152.     case GD_CANCEL:
  153.       GD_Cancel();
  154.       break;
  155.       
  156.     case GD_TYPE:
  157.       GD_Type(code);
  158.       break;
  159.  
  160.     case GD_FE_CANCEL:
  161.       GD_FE_Cancel();
  162.       break;
  163.     case GD_FE_NEVER:
  164.       GD_FE_Never();
  165.       break;
  166.     case GD_FE_USEDELETE:
  167.       GD_FE_UseDelete();
  168.       break;
  169.     case GD_FE_SAVEUSE:
  170.       GD_FE_SaveUse();
  171.       break;
  172.   }
  173.  
  174.   if(n=GetActiveNode())  
  175.   switch(id)
  176.   {
  177.     case GD_LIST:
  178.       GD_List(code,0,imsg);
  179.       break;
  180.       
  181.     case GD_SELECT_NAME:
  182.       GD_SelectName(n);
  183.       break;
  184.  
  185.     case GD_NAME:
  186.       LG_SetGadgetAttrs(GadControl,GD_LIST,
  187.                          GTLV_Labels,~0,TAG_DONE);
  188.       if(GetGadString(LG_GetGadget(GadControl,GD_NAME)))
  189.       {
  190.         STRPTR oldname;
  191.         ObtainSemaphore(&MPSem->NodeSem);
  192.         oldname=n->Def_Node.ln_Name;
  193.         if(n->Def_Node.ln_Name=AllocVec( 1+strlen(GetGadString(LG_GetGadget(GadControl,GD_NAME))),MEMF_CLEAR|MEMF_PUBLIC))
  194.         {
  195. /***************************************************************************************************************************/
  196.           n->OrigDisplayID=INVALID_ID;
  197. /***************************************************************************************************************************/
  198.           strcpy(n->Def_Node.ln_Name,GetGadString(LG_GetGadget(GadControl,GD_NAME)));
  199.           FreeVec(oldname);
  200.         }
  201.         else
  202.         {
  203.           //Remove((struct Node *)n);
  204.           //FreeDNode(n);
  205.           n->Def_Node.ln_Name=oldname;
  206.       //    UpdateGadgets();
  207.         }
  208.         ReleaseSemaphore(&MPSem->NodeSem);
  209.       }
  210.      
  211.       LG_SetGadgetAttrs(GadControl,GD_LIST,
  212.                          GTLV_Labels,&MPSem->PromotionList[CurrentList],
  213.                          TAG_DONE);
  214.                          
  215.       if(imsg->Qualifier&3)
  216.       {//shifted
  217.         switch(code)
  218.         {
  219.           case CURSORUP:
  220.             //GD_Move((NodeCnt-LVActive-1)+1);
  221.             GD_Move(-1,TRUE);
  222.             LG_SetGadgetAttrs(GadControl,GD_MOVE,
  223.                       GTSL_Level,       (NodeCnt-1)-LVActive,
  224.                       TAG_DONE);
  225.             ActivateStrGad=GD_NAME;   
  226.             break;
  227.           case CURSORDOWN:
  228.             //GD_Move((NodeCnt-LVActive-1)-1);
  229.             GD_Move(1,TRUE);
  230.             LG_SetGadgetAttrs(GadControl,GD_MOVE,
  231.                       GTSL_Level,       (NodeCnt-1)-LVActive,
  232.                       TAG_DONE);
  233.             ActivateStrGad=GD_NAME;
  234.             break;
  235.         }
  236.       }
  237.       else
  238.       {
  239.         switch(code)
  240.         {
  241.           case CURSORUP:
  242.             LVActive-=2;
  243.           case CURSORDOWN:
  244.             LVActive++;
  245.             GD_List(LVActive,0,0);
  246.             LG_SetGadgetAttrs(GadControl,GD_LIST,
  247.                               GTLV_Selected       ,LVActive,
  248.                               TAG_DONE);
  249.             break;
  250.         }        
  251.       }
  252.       break;
  253.       
  254.     case GD_MODESEL:
  255.       GD_ModeSel(n,code,0);
  256.       break;
  257.  
  258.     case GD_SELMODE:
  259.       GD_SelMode(n);
  260.       break;
  261.  
  262.     case GD_WIDTH:
  263.       n->Width=GetGadNumber(gad);
  264.       break;
  265.  
  266.     case GD_HEIGHT:
  267.       n->Height=GetGadNumber(gad);
  268.       break;
  269.  
  270.     case GD_OVERSCAN:
  271.       GD_Overscan(n,code,FALSE);
  272.       break;
  273.  
  274.     case GD_REMOVE:
  275.       GD_Remove(n);
  276.       break;
  277.  
  278.     case GD_LOOK3D:
  279.       GD_Look3D(n,gad->Flags & GFLG_SELECTED,FALSE);
  280.       break;
  281.  
  282.     case GD_AUTOSCROLL:
  283.       GD_AutoScroll(n,gad->Flags & GFLG_SELECTED,FALSE);
  284.       break;
  285.  
  286.     case GD_3D_DEFAULT:
  287.       GD_3D_Default(n,gad->Flags & GFLG_SELECTED,FALSE);
  288.       break;
  289.  
  290.     case GD_PENLIST:
  291.       GD_PenList(n,code,0);
  292.       break;
  293.  
  294.     case GD_PENVAL:
  295.       n->Pens[ActivePen]=GetGadNumber(LG_GetGadget(GadControl,GD_PENVAL));
  296.       switch(code)
  297.       {
  298.         
  299.         case CURSORUP:
  300.           ActivateStrGad=GD_PENVAL;
  301.           ActivePen--;
  302.           if(ActivePen<0)
  303.             ActivePen=NumDriPens-1;
  304.           break;
  305.         case CURSORDOWN:
  306.           ActivateStrGad=GD_PENVAL;
  307.           ActivePen++;
  308.           if(ActivePen>=NumDriPens)
  309.             ActivePen=0;
  310.           break;
  311.       }
  312.       //      if(imsg->Qualifier&3)
  313.       SetPenValues(n->Pens);
  314.       break;
  315.  
  316.     case GD_RESETPENS:
  317.       GD_ResetPens(n);
  318.       break;
  319.  
  320.     case GD_PICKFONT:
  321.       GD_PickFont(n);
  322.       break;
  323.  
  324.     case GD_INTERLEAVE:
  325.       GD_Interleave(n,gad->Flags & GFLG_SELECTED,FALSE);
  326.       break;
  327.  
  328.     case GD_BEHIND:
  329.       GD_Behind(n,gad->Flags & GFLG_SELECTED,FALSE);
  330.       break;
  331.     
  332.     case GD_BLANK_BORDER:
  333.       GD_Blank_Border(n,gad->Flags & GFLG_SELECTED,FALSE);
  334.       break;
  335.       
  336.     case GD_CENTER:
  337.       n->CenterFlags=code;
  338.       break;
  339.  
  340.     case GD_FASPECT:
  341.       GD_FAspect(n,gad->Flags & GFLG_SELECTED,FALSE);
  342.       break;
  343.  
  344.     case GD_SFONT:
  345.       GD_SFont(n,code,0);
  346.       break;
  347.  
  348.     case GD_PUBOPT:
  349.       GD_PubOpt(n,gad->Flags & GFLG_SELECTED,FALSE);
  350.       break;
  351.       
  352.     case GD_PUBNAME:
  353.       ReplaceGStr(&n->PubName,GD_PUBNAME);
  354.     /*
  355.       if(GetGadString(LG_GetGadget(GadControl,GD_PUBNAME)))
  356.       {
  357.         ObtainSemaphore(&MPSem->NodeSem);
  358.         FreeVec(n->PubName);
  359.         if(n->PubName=AllocVec( 1+strlen(GetGadString(LG_GetGadget(GadControl,GD_PUBNAME))),MEMF_CLEAR|MEMF_PUBLIC))
  360.           strcpy(n->PubName,GetGadString(LG_GetGadget(GadControl,GD_PUBNAME)));
  361.         ReleaseSemaphore(&MPSem->NodeSem);
  362.       }      */
  363.       break;
  364.       
  365.     case GD_DODEPTH:
  366.       GD_DoDepth(n,gad->Flags & GFLG_SELECTED,0);
  367.       break;
  368.       
  369.     case GD_SHAREPENS:
  370.       GD_SharePens(n,gad->Flags & GFLG_SELECTED,FALSE);
  371.       break;
  372.       
  373.     case GD_LOCKEDPENS:
  374.       ReplaceGStr(&n->LockedPens,GD_LOCKEDPENS);
  375. /*      if(GetGadString(LG_GetGadget(GadControl,GD_LOCKEDPENS)))
  376.       {
  377.         ObtainSemaphore(&MPSem->NodeSem);
  378.         FreeVec(n->LockedPens);
  379.         if(n->LockedPens=AllocVec( 1+strlen(GetGadString(LG_GetGadget(GadControl,GD_LOCKEDPENS))),MEMF_CLEAR|MEMF_PUBLIC))
  380.           strcpy(n->LockedPens,GetGadString(LG_GetGadget(GadControl,GD_LOCKEDPENS)));
  381.         ReleaseSemaphore(&MPSem->NodeSem);
  382.       }      */
  383.       break;
  384.     
  385.     case GD_HOTKEYOPT:
  386.       GD_HotKeyOpt(n,gad->Flags & GFLG_SELECTED,FALSE);
  387.       break;
  388.       
  389.     case GD_HOTKEYSTR:
  390.       ReplaceGStr(&n->HotKey,GD_HOTKEYSTR);
  391. /*      if(GetGadString(LG_GetGadget(GadControl,GD_HOTKEYSTR)))
  392.       {
  393.         ObtainSemaphore(&MPSem->NodeSem);
  394.         FreeVec(n->HotKey);
  395.         if(n->HotKey=AllocVec( 1+strlen(GetGadString(LG_GetGadget(GadControl,GD_HOTKEYSTR))),MEMF_CLEAR|MEMF_PUBLIC))
  396.           strcpy(n->HotKey,GetGadString(LG_GetGadget(GadControl,GD_HOTKEYSTR)));
  397.         ReleaseSemaphore(&MPSem->NodeSem);
  398.       }*/
  399.       break;
  400.     case GD_PALETTE:
  401.       GD_Palette(n,gad->Flags & GFLG_SELECTED,0);
  402.       break;
  403.       
  404.     case GD_EDITPALETTE:
  405.       GD_EditPalette(n);
  406.       break;
  407.       
  408.     case GD_FORCE_PLANAR:
  409.       GD_Force_Planar(n,gad->Flags & GFLG_SELECTED,FALSE);
  410.       break;
  411.       
  412.     case GD_BACKDROPOPT:
  413. //      GD_BackdropOpt(n,gad->Flags & GFLG_SELECTED,FALSE);
  414.       GD_BackdropOpt(n,code,FALSE);
  415.       break;
  416.     
  417.     case GD_BACKDROPCENTER:
  418.       GD_BackdropCenter(n,gad->Flags & GFLG_SELECTED,FALSE);
  419.       break;
  420.     
  421.     case GD_BACKDROPPICK:
  422.       GD_BackdropPick(n);
  423.       break;
  424.          
  425.     case GD_BACKDROPCOLOR:
  426.       GD_BackdropColor(n,FALSE);
  427.       break;
  428.       
  429.   } /* End Switch */  
  430. }
  431.  
  432. void ReplaceGStr(STRPTR *A, ULONG GID)
  433. {
  434.   STRPTR str;
  435.   
  436.   if(str=GetGadString(LG_GetGadget(GadControl,GID)))
  437.   {
  438.     ObtainSemaphore(&MPSem->NodeSem);
  439.     FreeVec(*A);
  440.     if(*A=AllocVec( 1+strlen(str),MEMF_CLEAR|MEMF_PUBLIC))
  441.     {
  442.       strcpy(*A,str);
  443.     }
  444.     ReleaseSemaphore(&MPSem->NodeSem);
  445.   }      
  446. }
  447.  
  448. void Process_Keys(struct IntuiMessage *IMsg)
  449. {
  450.   ULONG code,gadid;
  451.   WORD dirchange=1;
  452.   WORD letter;
  453.   struct DefaultNode *n;
  454.   
  455.   letter=IMsg->Code;
  456.  
  457.   if(LG_GadForKey(GadControl,letter,&gadid,&code))  
  458.   {
  459.     if(code&1) dirchange=-1;
  460.     switch(gadid)
  461.     {
  462.       case GD_LIST:
  463.         gadid=GD_NAME;
  464.       case GD_NAME:
  465.       case GD_WIDTH:
  466.       case GD_HEIGHT:
  467.       case GD_LOCKEDPENS:
  468.       case GD_PUBNAME:
  469.       case GD_HOTKEYSTR:
  470.       case GD_PENVAL:
  471. //      case GD_BACKDROPFILENAME:
  472.         ActivateStrGad=gadid;
  473.         break;
  474.       case GD_TYPE:
  475.         CurrentList_2+=dirchange;
  476.         GD_Type(CurrentList_2);
  477.         break;
  478.       case GD_NEW:
  479.         GD_New();
  480.         break;
  481.       case GD_SAVE:
  482.         GD_Save();
  483.         break;
  484.       case GD_USE:
  485.         GD_Use();
  486.         break;
  487.       case GD_CANCEL:
  488.         GD_Cancel();
  489.         break;
  490.       case GD_FE_CANCEL:
  491.         GD_FE_Cancel();
  492.         break;
  493.       case GD_FE_NEVER:
  494.         GD_FE_Never();
  495.         break;
  496.       case GD_FE_USEDELETE:
  497.         GD_FE_UseDelete();
  498.         break;
  499.       case GD_FE_SAVEUSE:
  500.         GD_FE_SaveUse();
  501.         break;
  502.     }
  503.     if(n=GetActiveNode())
  504.     switch(gadid)
  505.     {
  506.       case GD_SELECT_NAME:
  507.         GD_SelectName(n);
  508.         break;
  509.       case GD_MODESEL:
  510.         GD_ModeSel(n,dirchange,TRUE);
  511.         break;
  512.       case GD_SELMODE:
  513.         GD_SelMode(n);
  514.         break;
  515.       case GD_OVERSCAN: 
  516.         GD_Overscan(n,dirchange,TRUE);
  517.         break;
  518.       case GD_REMOVE:
  519.         GD_Remove(n);
  520.         break;
  521.       case GD_PENLIST:
  522.         GD_PenList(n,dirchange,TRUE);
  523.         break;
  524.       case GD_RESETPENS:
  525.         GD_ResetPens(n);
  526.         break;
  527.       case GD_PICKFONT:
  528.         GD_PickFont(n);
  529.         break;
  530.       case GD_INTERLEAVE:
  531.         GD_Interleave(n,0,TRUE);
  532.         break;
  533.       case GD_BEHIND:
  534.         GD_Behind(n,0,TRUE);
  535.         break;
  536.       case GD_BLANK_BORDER:
  537.         GD_Blank_Border(n,0,TRUE);
  538.         break;
  539.       case GD_LOOK3D:
  540.         GD_Look3D(n,0,TRUE);
  541.         break;
  542.       case GD_AUTOSCROLL:
  543.         GD_AutoScroll(n,0,TRUE);
  544.         break;
  545.       case GD_3D_DEFAULT:
  546.         GD_3D_Default(n,0,TRUE);
  547.         break;
  548.       case GD_CENTER:
  549.         GD_Center(n,dirchange,TRUE);
  550.         break;
  551.       case GD_FASPECT:
  552.         GD_FAspect(n,0,TRUE);
  553.         break;
  554.       case GD_SFONT:
  555.         GD_SFont(n,dirchange,TRUE);
  556.         break;
  557.       case GD_PUBOPT:
  558.         GD_PubOpt(n,0,TRUE);
  559.         break;
  560.       case GD_DODEPTH:
  561.         GD_DoDepth(n,0,TRUE);
  562.         break;
  563.       case GD_SHAREPENS:
  564.         GD_SharePens(n,0,TRUE);
  565.         break;
  566.       case GD_HOTKEYOPT:
  567.         GD_HotKeyOpt(n,0,TRUE);
  568.         break;
  569.       case GD_PALETTE:
  570.         GD_Palette(n,0,TRUE);
  571.         break;
  572.       case GD_EDITPALETTE:
  573.         GD_EditPalette(n);
  574.         break;
  575.       case GD_MOVE:
  576.         GD_Move(dirchange,TRUE);
  577.         break;
  578.       case GD_DEPTH:
  579.         GD_Depth(n,dirchange,TRUE);
  580.         break;
  581.       case GD_FORCE_PLANAR:
  582.         GD_Force_Planar(n,0,TRUE);
  583.         break;
  584.       case GD_BACKDROPOPT:
  585.         GD_BackdropOpt(n,dirchange,TRUE);
  586.         break;
  587.       case GD_BACKDROPPICK:
  588.         GD_BackdropPick(n);
  589.         break;
  590.       case GD_BACKDROPCENTER:
  591.         GD_BackdropCenter(n,0,TRUE);
  592.         break;
  593.       case GD_BACKDROPCOLOR:
  594.         GD_BackdropColor(n,TRUE);
  595.       break;
  596.  
  597.     }
  598.   }
  599. }
  600.  
  601.  
  602. void process_mousemoves(struct IntuiMessage *imsg)
  603. {
  604.   struct Gadget *gad;
  605.   struct DefaultNode *n;
  606.   UWORD  code,id;  
  607.   
  608.   code=imsg->Code;
  609.   gad=(struct Gadget*)imsg->IAddress;
  610.   id=gad->GadgetID;
  611.   if(n=GetActiveNode())
  612.   {
  613.     switch(id)
  614.     {
  615.       case GD_MOVE:
  616.         GD_Move(code,FALSE);
  617.         break;
  618.       case GD_DEPTH:
  619.         GD_Depth(n,code,FALSE);
  620.         break;
  621.     } /* End Switch */
  622.   }  
  623. }
  624.  
  625.  
  626. void process_menus(struct IntuiMessage *imsg)
  627. {
  628.   UWORD  menunumber,ns;
  629.   ULONG  menuid;
  630.   struct MenuItem *mi;
  631.   
  632.   menunumber=imsg->Code;
  633.   mi=ItemAddress(MenuStrip,menunumber);
  634.   if(mi)
  635.   do
  636.   {
  637.     menuid=(ULONG)(GTMENUITEM_USERDATA(mi));
  638.     switch(menuid)
  639.     {
  640.       case M_OPEN:
  641.         if(SelectFile(MiscText[LOAD_MP_PREFS],FALSE) )
  642.         {
  643.            ObtainSemaphore(&MPSem->NodeSem);
  644.            LG_SetGadgetAttrs(GadControl,GD_LIST,
  645.                          GTLV_Labels,~0,TAG_DONE);
  646.            FreeAllDefLists(MPSem->PromotionList);
  647.            ReleaseSemaphore(&MPSem->NodeSem);
  648.            PrefLoadFile(filename);
  649.  
  650.            LVActive=0;
  651.            UpdateGadgets();
  652.         }
  653.         break;
  654.         /*
  655.       case M_SAVE:
  656.         ObtainSemaphore(&MPSem->NodeSem);
  657.         PrefSaveFile(EnvArcFile);
  658.         PrefSaveFile(EnvFile);
  659.         ReleaseSemaphore(&MPSem->NodeSem);
  660.         break;
  661.         */
  662.       case M_SAVEAS:
  663.         if(SelectFile(MiscText[SAVE_MP_PREFS],TRUE) )
  664.         {
  665.           PrefSaveFile(filename);     
  666.         }
  667.         break;
  668.  
  669.       case M_IMPORT:
  670.         if(SelectFile(GetString(MSG_REQ_IMPORT_MP_PREFS),FALSE) )
  671.         {
  672.            LG_SetGadgetAttrs(GadControl,GD_LIST,
  673.                          GTLV_Labels,~0,TAG_DONE);
  674.                          
  675.            ImportFile(filename);
  676.                          
  677.            UpdateGadgets();
  678.         }
  679.         break;
  680.  
  681.       case M_ABOUT:
  682.         {
  683.           EZReq(Win,0,ModePro,AboutText,MiscText[OK],(ULONG)GetString(MSG_ABOUT_TRANSLATOR),
  684.                                                     (ULONG)GetString(MSG_ABOUT_FORINFO));
  685.         }
  686.         break;
  687.       case M_HIDE:
  688.         ClosePrefs=TRUE;
  689.         //PrefSaveFile(EnvFile);
  690.         break;
  691.       case M_LASTSAVED:
  692.         ObtainSemaphore(&MPSem->NodeSem);
  693.         LG_SetGadgetAttrs(GadControl,GD_LIST,
  694.                                  GTLV_Labels,~0,TAG_DONE);
  695.         FreeAllDefLists(MPSem->PromotionList);
  696.         ReleaseSemaphore(&MPSem->NodeSem);
  697.         PrefLoadFile(EnvArcFile);
  698.        
  699.         NodeCnt=CountNodes(&MPSem->PromotionList[CurrentList]); 
  700.         LVActive=min(NodeCnt-1,LVActive);
  701.         UpdateGadgets();
  702.         break;   
  703.       case M_RESTORE:
  704.         ObtainSemaphore(&MPSem->NodeSem);
  705.         LG_SetGadgetAttrs(GadControl,GD_LIST,
  706.                                  GTLV_Labels,~0,TAG_DONE);
  707.         FreeAllDefLists(MPSem->PromotionList);
  708.         ReleaseSemaphore(&MPSem->NodeSem);
  709.         PrefLoadFile(EnvFile);
  710.  
  711.         NodeCnt=CountNodes(&MPSem->PromotionList[CurrentList]); 
  712.         LVActive=min(NodeCnt-1,LVActive);
  713.  
  714.         UpdateGadgets();
  715.         break;   
  716.       case M_QUIT:
  717.         SendDaemonMsg(MP_QUIT,0,0);
  718.         break;
  719.         
  720.       case M_ENABLED://                                                                                (4.62.1)
  721.         MPSem->Enabled=(mi->Flags & CHECKED ? 1:0);//                                                  (4.62.1)
  722.         //ActivateCxObj(Broker,MPSem->Enabled);
  723.         break;
  724.         
  725.       case M_ENABLENL:
  726.         MPSem->EnabledNLM=(mi->Flags & CHECKED ? 1:0);
  727.         break;
  728.       
  729.       case M_SET_UNKNOWN:
  730.         MPSem->CatchScreens=(mi->Flags & CHECKED ? 1:0);
  731.         break;
  732.       case M_SET_UNKNOWN_PUB:
  733.         MPSem->CatchPubScreens=(mi->Flags & CHECKED ? 1:0);
  734.         break;  
  735.       case M_SET_CENTER_H:
  736.         MPSem->CenterAll=(MPSem->CenterAll & ~1) | (mi->Flags & CHECKED ? 1:0);
  737.         break;
  738.       case M_SET_CENTER_V:
  739.         MPSem->CenterAll=(MPSem->CenterAll & ~2) | (mi->Flags & CHECKED ? 2:0);
  740.         break;
  741.       case M_COPY_TO_SCR:
  742.       case M_COPY_TO_PRG:
  743.       case M_COPY_TO_SMODE:
  744.       case M_COPY_TO_PUB:
  745.         {
  746.           struct DefaultNode *dnode; 
  747.  
  748.           if(dnode=DupDNode(GetActiveNode()))  
  749.           {
  750.             switch(menuid)
  751.             {
  752.               case M_COPY_TO_SCR:
  753.                 dnode->Type=PL_SCREENNAMES;
  754.                 break;
  755.               case M_COPY_TO_PRG:
  756.                 dnode->Type=PL_PROGRAMNAMES;
  757.                 break;
  758.               case M_COPY_TO_PUB:
  759.                 dnode->Type=PL_PUBLICSCREENS;
  760.                 break;
  761.               case M_COPY_TO_SMODE:
  762.                 dnode->Type=PL_SCREENMODES;
  763.                 break;
  764.             }
  765.             ObtainSemaphore(&MPSem->NodeSem);
  766.             LG_SetGadgetAttrs(GadControl,GD_LIST,
  767.                               GTLV_Labels      ,~0,
  768.                               GTLV_Selected    ,0,
  769.                               TAG_DONE);
  770.             AddHead(&MPSem->PromotionList[dnode->Type],(struct Node *)dnode);
  771.             ReleaseSemaphore(&MPSem->NodeSem);
  772.             GD_Type(ListToCyc[dnode->Type]);
  773.           }
  774.         }
  775.         break;
  776.       case M_SORT:
  777.         {
  778.           struct Node *node;
  779.           struct List slist;
  780.           
  781.           NewList(&slist);
  782.           ObtainSemaphore(&MPSem->NodeSem);
  783.           LG_SetGadgetAttrs(GadControl,GD_LIST,
  784.                               GTLV_Labels      ,~0,
  785.                               GTLV_Selected    ,0,
  786.                               TAG_DONE);
  787.           while(node=RemHead(&MPSem->PromotionList[CurrentList]))
  788.           {
  789.             AddHead(&slist,node);
  790.           }
  791.           
  792.           while(node=RemHead(&slist))
  793.           {
  794.             EnqueueName(&MPSem->PromotionList[CurrentList],node);
  795.           }
  796.           LVActive=0;
  797.           ReleaseSemaphore(&MPSem->NodeSem);
  798.           UpdateGadgets();
  799.         }
  800.         break;
  801.     }
  802.     ns=mi->NextSelect;
  803.     mi=ItemAddress(MenuStrip,mi->NextSelect);
  804.   }while(ns!= MENUNULL && mi);
  805. }
  806.